/*
 * @Author: 梁青春
 * @Date: 2025-02-10 09:10:53
 * @LastEditTime: 2025-02-18 11:54:17
 * @LastEditors: 梁青春
 */
import {
	defineStore
} from 'pinia';
import {
	login,
	logout,
	getInfo
} from '@/api/login'
import {
	getToken,
	setToken,
	removeToken
} from '@/utils/auth'
import aProfile from '@/static/images/profile.png'

const useUserStore = defineStore('user', {
	state: () => ({
		token: getToken(),
		id: '',
		name: '',
		avatar: '',
		userType: '1',
		roles: [],
		fieldKeys: [],
		permissions: []
	}),
	actions: {
		// 登录
		login(userInfo) {
			const username = userInfo.username.trim()
			const password = userInfo.password
			const code = userInfo.code
			const uuid = userInfo.uuid
			return new Promise((resolve, reject) => {
				login(username, password, code, uuid)
					.then(res => {
						let data = res.data
						setToken(data.access_token)
						this.token = data.access_token
						resolve()
					})
					.catch(error => {
						reject(error)
					})
			})
		},
		// 获取用户信息
		getInfo() {
			return new Promise((resolve, reject) => {
				getInfo()
					.then(res => {
						const user = res.user
						const avatar = aProfile
						if (res.roles && res.roles.length > 0) {
							// 验证返回的roles是否是一个非空数组
							this.roles = res.roles
							this.permissions = res.permissions
						} else {
							this.roles = ['ROLE_DEFAULT']
						}
						if (user.roles && user.roles.length > 0) {
							const fieldKeys = user.roles.map(item => {
								if (item.roleKey != 'admin') {
									return item.fieldKey?.split(',')
								} else {
									return ['**']
								}
							})
							this.fieldKeys = [...new Set(fieldKeys.flat())]
						}
						this.userType = this.roles.some(role => role === 'admin') ? '1' : user
							.userType
						this.id = user.userId
						this.name = user.userName
						this.avatar = avatar
						resolve(res)
					})
					.catch(error => {
						reject(error)
					})
			})
		},
		// 退出系统
		logOut() {
			return new Promise((resolve, reject) => {
				logout(this.token)
					.then(() => {
						this.token = ''
						this.roles = []
						this.permissions = []
						removeToken()
						resolve()
					})
					.catch(error => {
						reject(error)
					})
			})
		}
	}
})

export default useUserStore